package com.ehe.common.core.web.service;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.ehe.common.core.enumeration.BooleanType;
import com.ehe.common.core.web.pojo.domain.SuperEntity;

import javax.annotation.Nonnull;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;

/**
 * 基础service
 * @param <T> 泛型
 * @author jerry
 */
public interface SuperService<T extends SuperEntity<T, PK>, PK extends Serializable> extends MybatisService<T, PK> {

    /**
     * 修改逻辑删除
     * @param id 主键id
     * @param isDelete 删除/还原
     * @return 修改条数
     */
    int logicDeleteChangeById(@Nonnull PK id, @Nonnull BooleanType isDelete);

    /**
     * 逻辑删除
     * @param id 主键id
     * @return 修改条数
     */
    int logicDeleteById(@Nonnull PK id);

    /**
     * 逻辑删除还原
     * @param id 主键id
     * @return 修改条数
     */
    int logicDeleteReductionById(@Nonnull PK id);

    /**
     * 单字段查询集合（eq）
     * @param function 字段
     * @param object 字段值
     * @return 集合
     */
    List<T> listByFieldEquals(SFunction<T, String> function, Object object);

    /**
     * 单字段查询（eq）
     * @param function 字段
     * @param object 字段值
     * @return 集合
     */
    Optional<T> oneByFieldEquals(SFunction<T, String> function, Object object);
}
